"""
# -*- coding: utf-8 -*-
# @Time    : 2023/5/25 8:44
# @Author  : 王摇摆
# @FileName: PLA_Manual.py
# @Software: PyCharm
# @Blog    ：https://blog.csdn.net/weixin_44943389?type=blog
"""
import numpy as np


def pla(X, y):
    """
    感知器学习算法实现
    注意只能处理线性可分的数据集，输入线性不可分函数无法停止
    args:
        X - 训练数据集
        y - 目标标签值
    return:
        W - 权重系数
    """
    done = False
    # 初始化权重系数
    W = np.zeros(X.shape[1])
    # 循环
    while (done == False):
        done = True
        # 遍历训练数据集
        for index in range(len(X)):
            x = X[index]
            # 判定是否与目标值不符
            if x.dot(W) * y[index] <= 0:
                done = False
                # 修正权重系数
                W = W + y[index] * x
    return W
